package com.cyt.sys.service;

import com.cyt.base.model.dto.ReturnResult;
import com.cyt.sys.model.po.SysUser;
import com.cyt.sys.model.vo.SysUserVo;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 基础用户service接口类
 *
 * @author shengQiang yu
 * @date 2019-04-24 16:10
 */
public interface SysUserService extends BaseService<SysUser> {

    /**
     * 网页端登录
     *
     * @param loginName 登录名称
     * @param password  登录密码
     * @return ReturnResult 对象
     * @author shengQiang yu
     * @date 2019-04-24 16:10
     */
    ReturnResult webLogin(HttpServletRequest request, String loginName, String password) throws Exception;

    /**
     * 网页端退出
     *
     * @return ReturnResult 对象
     * @author shengQiang yu
     * @date 2019-04-24 16:10
     */
    ReturnResult webExit(HttpServletRequest request);

    /**
     * 获取用户集合
     *
     * @param sysUserVo 对象
     * @return List<SysUser>
     * @author shengQiang yu
     * @date 2019-04-24 16:10
     */
    List<SysUser> selectList(SysUserVo sysUserVo);

    /**
     * 用户分页查询
     *
     * @param sysUserVo 对象
     * @param pageSize  当前页面
     * @param pageNum   页面数量
     * @return ReturnResult 对象
     * @author liufu zhu
     * @date 2018-11-29 15:43
     */
    ReturnResult page(SysUserVo sysUserVo, int pageSize, int pageNum);

    /**
     * 保存/更新用户
     *
     * @param sysUserVo   对象
     * @param currentUser 当前用户
     * @return ReturnResult 对象
     * @author liufu zhu
     * @date 2018-11-29 15:43
     */
    ReturnResult addOrUpdate(SysUserVo sysUserVo, SysUser currentUser);

    /**
     * 用户删除
     *
     * @param ids         用户id集合多个用“，”隔开
     * @param currentUser 当前用户
     * @return ReturnResult 对象
     * @author liufu zhu
     * @date 2018-11-29 15:43
     */
    ReturnResult removeByIds(String ids, SysUser currentUser);

    /**
     * 获取组织机构和人员树
     *
     * @param sysUserVo 对象
     * @return ReturnResult 对象
     * @author shengQiang yu
     * @date 2018-11-29 15:43
     */
    ReturnResult dTreeList(SysUserVo sysUserVo);


    /**
     * 用户分页左关联查询用户、角色、和组织信息
     *
     * @param sysUserVo 对象
     * @param pageSize  当前页面
     * @param pageNum   页面数量
     * @return ReturnResult 对象
     * @author shengQiang yu
     * @date 2018-11-29 15:43
     */
    ReturnResult pageListLeftRoleAndOrg(SysUserVo sysUserVo, int pageSize, int pageNum);

    /**
     * 根据token 获取当前用户
     *
     * @param token 用户信息
     * @return SysUser
     * @author Jun Han
     * @date 2019/7/9 18:07
     */

    SysUser selectUserByToken(String token);

    /**
     * 导出用户信息
     *
     * @param sysUserVo baseUserVo对象
     * @param response  HttpServletResponse对象
     * @author shengQiang yu
     * @date 2019-03-08 14:52
     */
    void exportExecl(HttpServletResponse response, SysUserVo sysUserVo);

    /**
     * 用户execl导入
     *
     * @param file    文件对象
     * @param request 请求
     * @param catalog 文件保存自定义目录
     * @param update  1、不更新已存在数据，2、更新存在数据
     * @return ReturnResult
     * @author shengQiang yu
     * @date 2019-03-08 15:19
     */
    ReturnResult importExecl(MultipartFile file, HttpServletRequest request, String catalog, String update);

    /**
     * 更新用户信息
     *
     * @param request   请求对象
     * @param sysUserVo 参数传入对象
     * @return ReturnResult
     * @author rong yuan
     * @date 2019-8-20 16:29
     */
    ReturnResult update(HttpServletRequest request, SysUserVo sysUserVo);

    /**
     * 注册用户
     * @param request
     * @param sysUserVo
     * @author congcong tao
     * @date 2019/12/30 9:53
     */
    ReturnResult register(HttpServletRequest request, SysUserVo sysUserVo);
}